package me.yushuai.wukong.base.service;

import me.yushuai.wukong.base.api.dto.CreateWorkingAreaDTO;
import me.yushuai.wukong.base.api.dto.PagingSearchWorkingArea;
import me.yushuai.wukong.base.api.dto.UpdateWorkingAreaDTO;
import me.yushuai.wukong.base.api.dto.WorkingAreaDTO;
import me.yushuai.wukong.common.dto.PageDTO;
import me.yushuai.wukong.common.error.WuKongException;
import me.yushuai.wukong.common.exceptin.BizIdNotExistException;
import me.yushuai.wukong.common.exceptin.NotExistException;
import me.yushuai.wukong.common.service.BaseService;

/**
 * 工作区业务接口
 *
 * @author zhoushuai@189.cn
 * @since 2022-09-07
 */
public interface WorkingAreaService extends BaseService {

    /**
     * 新建一条工作区信息
     *
     * @param createWorkingAreaDTO 工作区信息
     * @return 返回工作区信息编号
     * @throws BizIdNotExistException 当工作区已存在时抛出异常
     */
    Long createWorkingArea(CreateWorkingAreaDTO createWorkingAreaDTO) throws BizIdNotExistException;

    /**
     * 修改工作区信息
     *
     * @param updateWorkingAreaDTO 工作区信息
     * @return 返回修改后的工作区编号
     * @throws NotExistException 当工作区不存在时抛出异常
     */
    Long updateWorkingAreaById(UpdateWorkingAreaDTO updateWorkingAreaDTO) throws NotExistException;

    /**
     * 修改工作区信息
     *
     * @param updateWorkingAreaDTO 工作区信息
     * @return 返回修改后的工作区编号
     * @throws BizIdNotExistException 当工作区不存在时抛出异常
     */
    Long updateWorkingAreaByBizId(UpdateWorkingAreaDTO updateWorkingAreaDTO) throws BizIdNotExistException;
    /**
     * 删除一条工作区信息
     *
     * @param workingAreaId 工作区编号
     * @throws NotExistException 当工作区编码不存在时抛出异常
     */
    void deleteWorkingArea(Long workingAreaId) throws NotExistException;

    /**
     * 通过ID查询工作区的详细信息
     *
     * @param workingAreaId 工作区编号
     * @return 返回工作区的详细信息
     * @throws NotExistException 当工作区不存在时抛出异常
     */
    WorkingAreaDTO findById(Long workingAreaId) throws NotExistException;

    /**
     * 分页条件检索工作区信息
     *
     * @param pagingSearchWorkingArea 分页检索条件
     * @return 分页返回查询结果
     */
    PageDTO<WorkingAreaDTO> pagingSearchWorkingArea(PagingSearchWorkingArea pagingSearchWorkingArea);


    /**
     * 通过工作区编号检查是否存在
     *
     * @param workingAreaId 工作区编号
     * @throws WuKongException 当工作区不存在时抛出异常
     */
    void assertWorkingAreaIdHasExist(Long workingAreaId) throws WuKongException;

    /**
     * 通过工作区编码查询工作区的详细信息
     *
     * @param bizId 工作区编码
     * @return 返回工作区的详细信息
     * @throws BizIdNotExistException 当工作区编码不存在时抛出异常
     */
    WorkingAreaDTO findWorkingAreaByBizId(String bizId) throws BizIdNotExistException;
}
